<?php
/**
 * 推送队列处理
 *
 * PHP version 5
 *
 * @package   YuDian
 * @author    Fee <Fee@shorigo.com>
 * @copyright 2015 Shangyuanruige Inc.
 */

namespace app\commands;
use Yii;
use yii\console\Controller;
use JPush;

class PushController extends Controller
{
    public function actionIndex()
    {
         $redis = Yii::$app->redis;

		while (true) {
		    $message = $redis->RPOP('push');

		    if (!empty($message)) {
		        $data = unserialize($message);
				$this->_push($data);
		    }

		    sleep(5);
		}
    }
    
    /**
     * 推送
     *
     * @param array $data = array(
     *                         type        1 有用户绑定您的孩子，等待审核  （给家长）
     *                                     2 绑定孩子完成 （给家长）
     *                                     3 绑定孩子请求被拒绝   （给家长）
     *                                     4 作业更新    （给家长）
     *                                     5 成绩更新   （给家长）
     *                                     6 有家长请假（给老师）   
     *                                     7 老师同意请假 （给家长）
     *                                     8 老师不同意请假 （给家长）
     *                                     9 进出校门  （给家长）
     *                                     10 系统通知 运营后台 （给所有用户）
     *                                     11 学校通知 OA    （给所有用户）
     *                         audience    接收目标 0全部 或 别名数组 [
     *                                                                  'user_id' 用户ID
     *                                                                  'rule_id' 角色ID 
     *                                                                  'child_name'    孩子姓名
     *                                                                  'alert'   推送信息
     *                                                                ]
     *                         rid         关联ID 作业ID/考试ID/请假ID/记录ID/通知ID
     *                         alert       推送信息 audience=0 有效
     *                      )
     *
     * @return bool
     * @author Fee
     */
    protected function _push($data=array())
    {
        $client = new JPush(Yii::$app->params['Jpush_app_key'], Yii::$app->params['Jpush_master_secret'], null);

        if($data["audience"] == 0) { //全局推
            $alert = $data['alert'];
            unset($data['alert']);
            $result = $client->push()
                ->setPlatform(array('ios', 'android'))
                ->addAllAudience()
                //->setNotificationAlert($alert)
                //->addAndroidNotification($alert, '', 1, $data)
                ->addIosNotification($alert, '', '+1', true, '',$data)
                ->setMessage($alert, '', '', $data)
                ->setOptions(100000, 864000, null, false)
                ->send();
            if(!$result["state"]) {
                Yii::warning("推送失败,错误码:".$result["data"]->error->code.";错误信息:".$result["data"]->error->message);
            }
        } else {
            $audience = $data["audience"];

            unset($data["audience"]);

            foreach ($audience as $a) {
                
                if(empty($a['alert'])) {
                    $alert = Yii::t("app", Yii::$app->params['push_template'][$data["type"]], $a["child_name"]);
                } else {
                    $alert = $a['alert'];
                }

                $data["rule_id"] = $a["rule_id"];

                $android_data = $data;

                $android_data["alert"] = $alert;

                $result = $client->push()
                    ->setPlatform(array('ios', 'android'))
                    ->addAlias($a["user_id"]."")
                    //->setNotificationAlert($alert)
                    //->addAndroidNotification($alert, '', 1, $data)
                    ->addIosNotification($alert, 'UILocalNotificationDefaultSoundName', '+1', true, '',$data)
                    ->setMessage('', '', '', $android_data)
                    ->setOptions(100000, 864000, null, false)
                    ->send();

                    if(!$result["state"]) {
                        Yii::warning("推送失败,错误码:".$result["data"]->error->code.";错误信息:".$result["data"]->error->message);
                    }
            }
        }
        return true;
    }
}
